home *** CD-ROM | disk | FTP | other *** search
/ ADA Programming Guide / ADA Programming Guide.iso / ada_a9x / ex2.ada < prev    next >
Text File  |  1996-01-30  |  2KB  |  59 lines

  1. -- Source Ex2.Ada
  2. -- By Arthur V. Lopes, 7/12/94
  3. -- This Program attemt to place ten times the letter A in the first screen line
  4. -- and ten times the letter B in the second screen line.
  5. -- The main program just cleans the screen and places the cursor in the
  6. -- third screen row.
  7. -- Instead of two procedures, two tasks are used to output its letter
  8. -- designator to its screen line.
  9. -- Study carfully the differences among the two approaches.
  10. -- Compile and run this program.
  11. -- You will see that the screen does not shown the same result as the 
  12. -- previous program caused. Why?
  13. -- The problem is caused by inadequate concurrent use of a shared resource.
  14. -- To start with, depending on the scheduller used when you executed the
  15. -- program, the screen is not cleared.
  16. -- The bodyframe of procedure ClearScreen has two procedure calls.
  17. -- The execution of the instructions generated by these two calls must
  18. -- not be interrupted. Otherwise, the screen driver will not understand
  19. -- the intended sequence issued by the two procedure calls.
  20. -- This is one of the problems with program Concurrent_Programming_1.
  21. -- It is a hint for you to find the other problems.
  22. -- The next program, Concurrent_Programming_2 will show you one the most
  23. -- efficient way to make a concurrent version of program 
  24. -- Sequential_Programming.
  25.  
  26. WITH Ada.Text_IO, VT100; USE Ada.Text_IO;
  27. PROCEDURE Concurent_Programming_1 IS
  28.  
  29.     SUBTYPE Interval IS INTEGER RANGE 1 .. 10;
  30.  
  31.     TASK Display_A; -- This is the specification part of Display_A
  32.     TASK Display_B;
  33.  
  34.     TASK BODY Display_A IS -- This is the body part of Display_A
  35.     BEGIN
  36.         FOR I IN Interval LOOP
  37.             VT100.MoveCursor(I,1);
  38.             DELAY 0.01;
  39.             Put('A');
  40.         END LOOP;
  41.     END Display_A;
  42.  
  43.     TASK BODY Display_B IS
  44.     BEGIN
  45.         FOR I IN Interval LOOP
  46.             VT100.MoveCursor(I,2);
  47.             DELAY 0.01;
  48.             Put('B');
  49.         END LOOP;
  50.     END Display_B;
  51.  
  52. BEGIN
  53.     VT100.ClearScreen;
  54.     -- The procedure calls were removed.
  55.     -- Tasks start on their own, after its ancestor task has been
  56.     -- elaborated. Ada 9X does not allow a task call as a means
  57.     -- to initiate the task execution!
  58.     VT100.MoveCursor(1,3);
  59. END Concurent_Programming_1;